import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    // 在生产环境中禁用 Vue DevTools 以减少内存占用
    process.env.NODE_ENV === 'development' ? vueDevTools() : null,
    AutoImport({
      resolvers: [ElementPlusResolver()],
      imports: ['vue', 'vue-router', 'pinia'],
      dts: true
    }),
    Components({
      resolvers: [ElementPlusResolver()],
      // 减少组件扫描范围
      dirs: ['src/components'],
      extensions: ['vue']
    })
  ].filter(Boolean),
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    },
  },
  server: {
    port: 5174,
    // 优化开发服务器性能
    hmr: {
      overlay: false // 减少 HMR 覆盖层的内存使用
    },
    // 减少文件监听
    watch: {
      ignored: ['**/node_modules/**', '**/dist/**', '**/.git/**']
    },
    proxy: {
      // 代理所有以 /api 开头的请求
      '/api': {
        target: 'http://localhost:8081', // 你的后端地址
        changeOrigin: true // 改变 origin 头
        // 不重写路径，保持/api前缀
      }
    }
  },
  // 构建优化
  build: {
    // 减少内存使用
    chunkSizeWarningLimit: 1000,
    rollupOptions: {
      output: {
        // 代码分割，减少单个文件大小
        manualChunks: {
          'element-plus': ['element-plus'],
          'vue-vendor': ['vue', 'vue-router', 'pinia'],
          'echarts': ['echarts']
        }
      }
    }
  },
  // 优化依赖预构建
  optimizeDeps: {
    include: ['vue', 'vue-router', 'pinia', 'element-plus', 'echarts'],
    exclude: ['@fortawesome/fontawesome-free']
  }
})
